package lsl.leetCode.year2023.test0126;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class test268 {
    public static void main(String[] args) {
        int[] nums = {1, 0, 2, 3};
        System.out.println(missingNumber1(nums));
    }

    //方法一：排序
    public static int missingNumber1(int[] nums) {
        //将数组排序之后，即可根据数组中每个下标处的元素是否和下标相等，得到丢失的数字。
        Arrays.sort(nums);
        int n = nums.length;
        //分别考虑以下两种情况：
        //1.从左到右遍历数组nums，如果存在 0≤i<n 使得nums[i]≠i，则缺失的数字是满足nums[i]≠i的最小的i;
        for (int i = 0; i < n; i++) {
            if (nums[i] != i) {
                return i;
            }
        }
        //2.如果对任意0≤i<n,都有nums[i=i,那么缺少的数字是n
        return n;
    }


    //方法二：哈希集合
    public static int missingNumber2(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            set.add(nums[i]);
        }
        int missing = -1;
        for (int i = 0; i <= n; i++) {
            if (!set.contains(i)) {
                missing = i;
                break;
            }
        }
        return missing;
    }
}
